package com.phonetools.commonutils.collections

/**
 * 复制Map并添加元素[key][value]，返回处理后的Map
 * @param  key
 * @param  value
 * @return Map
 */
fun <K, V> Map<K, V>.copyPut(key: K, value: V): Map<K, V> =
    toMutableMap().apply { put(key, value) }

/**
 * 复制Map并添加集合[values]，返回处理后的Map
 * @param  values
 * @return Map
 */
fun <K, V> Map<K, V>.copyPutAll(values: Map<out K, V>): Map<K, V> =
    toMutableMap().apply { putAll(values) }

/**
 * 复制Map并添加集合[pairs]，返回处理后的Map
 * @param  pairs
 * @return Map
 */
fun <K, V> Map<K, V>.copyPutAll(pairs: Array<out Pair<K, V>>): Map<K, V> =
    toMutableMap().apply { putAll(pairs) }

/**
 * 复制Map并添加集合[pairs]，返回处理后的Map
 * @param  pairs
 * @return Map
 */
fun <K, V> Map<K, V>.copyPutAll(pairs: Iterable<Pair<K, V>>): Map<K, V> =
    toMutableMap().apply { putAll(pairs) }

/**
 * 复制Map并添加集合[pairs]，返回处理后的Map
 * @param  pairs
 * @return Map
 */
fun <K, V> Map<K, V>.copyPutAll(pairs: Sequence<Pair<K, V>>): Map<K, V> =
    toMutableMap().apply { putAll(pairs) }

/**
 * 复制Map并删除[key]元素，返回处理后的Map
 * @param  key
 * @return Map
 */
fun <K, V> Map<K, V>.copyRemove(key: K): Map<K, V> =
    toMutableMap().apply { remove(key) }
